{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 最小二乘法到底是什么？有什么用？\n",
    "答：**最小二乘法一般用来求解线性方程组用的**。\n",
    "# 如何用最小二乘法求解线性方程组？\n",
    "比如现在有一组方程组，其中$a_i,b_i$是一个数字，$x_i$是我们需要求的变量。\n",
    "\n",
    "$a_1x_1 + a_2x_2 =b_1 \\\\\n",
    "a_3x_1 + a_4x_2 =b_2$\n",
    "\n",
    "我们为了方便编程我们先将上面这个方程组凑成矩阵相乘的形式：\n",
    "\n",
    "令$A= \\begin{bmatrix}\n",
    "  a_1 & a_2 \\\\\n",
    "  a_3 & a_4 \\\\\n",
    " \\end{bmatrix}$\n",
    " \n",
    " 令$X=\\begin{bmatrix}\n",
    "  x_1 \\\\ x_2\n",
    " \\end{bmatrix}$\n",
    " \n",
    " 令$B=\\begin{bmatrix}\n",
    "  b_1 \\\\ b_2\n",
    " \\end{bmatrix}$\n",
    " 于是前面提到的方程组可以写成$AX=B$。我们的目标就是求得$X$。很明显我们可以直接计算$X=A^{-1}B$。\n",
    " \n",
    " **但是通常数据是有噪声的，很可能AX=B这个方程组是无解的。但是就这样放弃了吗**？\n",
    " 在计算机界中一个很重要的思想就是虽然无法求得一个解，但是我们可以求得一个尽可能理想的解。**于是“最小二乘法”应运而生**。\n",
    " \n",
    " # 最小二乘法与解方程之间的联系是什么？\n",
    " \n",
    "前面提到了现实世界中可能无法求解$AX=B$，但是我们可以通过求$(AX-B)^2$这个东西的最小值时对应的$X$。为什么？因为$(AX-B)^2$的最小值是0.这意味着此时的$AX-B$会尽可能的接近0.这意味着此时的$X$满足$AX \\approx B$。所以此时的X是一个比较理想的解。我想现在你应该懂了最小二乘法中的“最小”“二乘”的含义了。\n",
    "\n",
    "由于$(AX-B)^2$它是一个关于$X$的二次函数。根据高中学的知识，因此我们可以就$(AX-B)^2$对$X$进行求导，当导数等于0时$(AX-B)^2$取得最小值。此时的X就是方程$AX=B$的一个比较理想的解。\n",
    "\n",
    "\n",
    " 现在我们开始看看如何就$(AX-B)^2$对$X$求导并且让它等于0（注意这里A,X,B是矩阵）。\n",
    " \n",
    "于是我们得到\n",
    " $A^TAX=A^TB$，所以$X=(A^TA)^{-1}A^TB$。\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
